function bucketSort (arr) {
  let MaxNum = Math.max(...arr)
  let MinNum = Math.min(...arr)
  // 获取桶的长度
  let bucketLen = Math.floor((MaxNum - MinNum) / arr.length) + 1
  // bucketArr是一个二维数组, 一开始给每个元素填充上一个空数组
  let bucketArr = new Array(bucketLen).fill(null).map(_ => [])
  // 遍历原数组, 将每个元素放入桶数组中
  for (let num of arr) {
    let index = Math.floor((num - MinNum) / arr.length)
    bucketArr[index].push(num)
  }
  const res = []
  for (let item of bucketArr) {
    // bucketArr中的每个元素都是一个数组, 先对它的每一个元素进行排序
    item.sort((a, b) => a - b)
    // 依次放入result数组中
    for (let num of item) {
      res.push(num)
    }
  }
  return res
}
let arr = [2, 5, 3, 7, 6, 4, 21, 13, 1]
console.log(bucketSort(arr))